home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / endo / init.c < prev    next >
C/C++ Source or Header  |  1995-05-03  |  4KB  |  128 lines

  1. /*************************************************************************
  2.  *                                                                       *
  3.  *  Copyright (c) 1992, 1993 Ronald Joe Record                           *
  4.  *                                                                       *
  5.  *  All rights reserved. No part of this program or publication may be   *
  6.  *  reproduced, transmitted, transcribed, stored in a retrieval system,  *
  7.  *  or translated into any language or computer language, in any form or *
  8.  *  by any means, electronic, mechanical, magnetic, optical, chemical,   *
  9.  *  biological, or otherwise, without the prior written permission of:   *
  10.  *                                                                       *
  11.  *      Ronald Joe Record (408) 458-3718                                 *
  12.  *      212 Owen St., Santa Cruz, California 95062 USA                   *
  13.  *                                                                       *
  14.  *************************************************************************/
  15.  
  16. #include <stdio.h>
  17. #include <string.h>
  18. #include "x.h"
  19. #ifdef USE_3D
  20. #include "globals.h"
  21. #endif
  22.  
  23. double window_distance = 10.0;
  24. int lowrange, start;
  25.  
  26. void
  27. init_data()
  28. {
  29.     static int i, fg, bg;
  30.     extern image_data_t rubber_data;
  31.     extern triple window_center;
  32.     extern int Qflag, p_inc, q_inc, mandel, color_offset, reverse_video;
  33.  
  34.     numcolors = XDisplayCells(dpy, XDefaultScreen(dpy));
  35.     displayplanes = DisplayPlanes(dpy, XDefaultScreen(dpy));
  36.     if (numcolors > MAXCOLOR)
  37.         numcolors = MAXCOLOR;
  38.     if (numcolors <= 16) {
  39.         STARTCOLOR = 3; MINCOLINDEX = 6;
  40.         color_offset = 1;
  41.     }
  42.     numfreecols = numcolors - MINCOLINDEX;
  43.     lowrange = MINCOLINDEX - STARTCOLOR;
  44.     if ((lyap) || (mandel && find))
  45.         start = MINCOLINDEX;
  46.     else
  47.         start = STARTCOLOR;
  48.     if (Qflag == 4) {
  49.         x_inc = x_range / 4.0;
  50.         y_inc = y_range / 4.0;
  51.         numrows = row = 4;
  52.         p_inc = width / 4;
  53.         q_inc = height / 4;
  54.     }
  55.     else {
  56.         x_inc = x_range / (double)width;
  57.         y_inc = y_range / (double)height;
  58.         p_inc = 1;
  59.         q_inc = 1;
  60.     }
  61.     point.x = 0;
  62.     point.y = 0;
  63.     row = 1; numrows = 1;
  64.     maxexp = minexp = 0;
  65.     x = rubber_data.p_min = min_x;
  66.     y = rubber_data.q_min = min_y;
  67.     rubber_data.p_max = max_x;
  68.     rubber_data.q_max = max_y;
  69.     if (show)
  70.         show_defaults();
  71.     srand48((long)time(0));
  72.     AllInitBuffer();
  73.     if (reverse_video) {
  74.         fg = BlackPixel(dpy, XDefaultScreen(dpy));
  75.         bg = WhitePixel(dpy, XDefaultScreen(dpy));
  76.     }
  77.     else {
  78.         fg = WhitePixel(dpy, XDefaultScreen(dpy));
  79.         bg = BlackPixel(dpy, XDefaultScreen(dpy));
  80.     }
  81.     BlackOnWhiteGC = XCreateGC(dpy, DefaultRootWindow(dpy),
  82.         (unsigned long) 0, (XGCValues *) 0);
  83.     /* set the background of the BlackOnWhite context to White */
  84.     XSetBackground(dpy,BlackOnWhiteGC, WhitePixel(dpy, XDefaultScreen(dpy)));
  85.     /* set the foreground of the BlackOnWhite context to Black */
  86.     XSetForeground(dpy,BlackOnWhiteGC, BlackPixel(dpy, XDefaultScreen(dpy)));
  87.     Reverse_GC = XCreateGC(dpy, DefaultRootWindow(dpy),
  88.         (unsigned long) 0, (XGCValues *) 0);
  89.     /* set the background of the reverse context to the normal foreground */
  90.     XSetBackground(dpy,Reverse_GC, fg);
  91.     /* set the foreground of the reverse context to the normal background */
  92.     XSetForeground(dpy,Reverse_GC, bg);
  93.     Data_GC[0] = XCreateGC(dpy, DefaultRootWindow(dpy),
  94.         (unsigned long) 0, (XGCValues *) 0);
  95.     /* set the background to black */
  96.     XSetBackground(dpy,Data_GC[0], bg);
  97.     /* set the foreground of the 0th context to black */
  98.     XSetForeground(dpy,Data_GC[0], bg);
  99.     Data_GC[1] = XCreateGC(dpy, DefaultRootWindow(dpy),
  100.         (unsigned long) 0, (XGCValues *) 0);
  101.     /* set the background to black */
  102.     XSetBackground(dpy,Data_GC[1], bg);
  103.     /* set the foreground of the 1st context to white */
  104.     XSetForeground(dpy,Data_GC[1], fg);
  105.     for (i=2; i<MAXCOLOR; i++) {
  106.         Data_GC[i] = XCreateGC(dpy, DefaultRootWindow(dpy),
  107.         (unsigned long) 0, (XGCValues *) 0);
  108.         /* set the background to black */
  109.         XSetBackground(dpy,Data_GC[i], bg);
  110.         /* set the foreground of the ith context to i */
  111.         XSetForeground(dpy, Data_GC[i], i);
  112.     }
  113. #ifdef USE_3D
  114.     /*      Initialize these global constants for everyone's benefit */
  115.     half_pi = M_PI / 2.0;
  116.     two_pi = 2.0 * M_PI;
  117.     radians_per_degree = M_PI / 180.0;
  118.     degrees_per_radian = 180.0 / M_PI;
  119.     /*    Position the window on the z-axis */
  120.     window_center.x = window_center.y = 0.0;
  121.     window_center.z = WINDOW_DISTANCE;
  122.     if (thermometer)
  123.         vue_init(window_center, trawidth - THERMWIDTH, traheight);
  124.     else
  125.         vue_init(window_center, trawidth, traheight);
  126. #endif
  127. }
  128.